package com.hongning.railway.ui.main.mine;

import android.app.Application;
import android.databinding.ObservableField;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import android.util.Log;

import com.hongning.railway.app.Constant;
import com.hongning.railway.data.AppRepository;
import com.hongning.railway.entity.LoginEntity;
import com.hongning.railway.entity.reqbean.ReqAssessesIntegralBean;
import com.hongning.railway.entity.resbean.BaseRes;
import com.hongning.railway.entity.resbean.MessageEvent;
import com.hongning.railway.entity.resbean.UpdateUserInfoBean;
import com.hongning.railway.ui.categorylistnews.CategoryListNewsFragment;
import com.hongning.railway.ui.login.LoginActivity;
import com.hongning.railway.ui.main.MainActivity;
import com.hongning.railway.ui.main.fragments.threesessionsandonelesson.ThreesessionSanDoneLessonViewModel;
import com.hongning.railway.ui.uichangeobserable.BtnClickChangeObserable;
import com.hongning.railway.ui.uichangeobserable.ListUIChangeObserable;
import com.hongning.railway.ui.widget.MultiSelectPopWindow;
import com.hongning.railway.ui.widget.alertview.AlertView;
import com.hongning.railway.ui.widget.alertview.AlertViewOnItemClickListener;
import com.hongning.railway.util.Apputils;
import com.hongning.railway.util.GsonUtil;
import com.hongning.railway.util.TimeUtils;

import org.json.JSONObject;

import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Action;
import io.reactivex.functions.Consumer;
import me.goldze.mvvmhabit.base.AppManager;
import me.goldze.mvvmhabit.base.BaseViewModel;
import me.goldze.mvvmhabit.binding.command.BindingAction;
import me.goldze.mvvmhabit.binding.command.BindingCommand;
import me.goldze.mvvmhabit.http.ApiDisposableObserver;
import me.goldze.mvvmhabit.http.BaseResponse;
import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.SPUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;

public class PartyMemberInfoViewModel  extends BaseViewModel<AppRepository> {
    public ObservableField<LoginEntity> loginEntity=new ObservableField<>(Apputils.getLoginInfo());
    public BtnClickChangeObserable uc = new BtnClickChangeObserable();
    public ObservableField<Boolean> isShowBtn=new ObservableField<>();
    public PartyMemberInfoViewModel(@NonNull Application application, AppRepository model) {
        super(application, model);
        LoginEntity mloginEntity= Apputils.getLoginInfo();
        if (mloginEntity!=null&&mloginEntity.getGroups()!=null&&!mloginEntity.getGroups().isEmpty())
        {
            isShowBtn.set(true);
        }else {
            isShowBtn.set(false);
        }
    }

    public void click(int  id){
        switch (id)
        {
            case 0:
                finish();
                break;
            case 1:
                uc.btnClick.call();
                break;
            case 2:
                //退出登录
                showDialogForTip();
                break;
            case 3:
                //性别
                uc.btnSexClick.call();
                break;
            case 4:
                //出生日期
                uc.btnBirsDayClick.call();
                break;
            case 5:
                //政治面貌
                uc.btnzzmmClick.call();
                break;
            case 6:
                //入党时间
                uc.btnrdsjClick.call();
                break;
            case 7:
                //提交
                submit();
                break;

        }
    }
    public void submit(){
        UpdateUserInfoBean updateUserInfoBean=new UpdateUserInfoBean();
        updateUserInfoBean.setStaffId(loginEntity.get().getUserinfo().getStaffId());//	是	String	人员编号。
        updateUserInfoBean.setStaffName(loginEntity.get().getUserinfo().getStaffName());//	是	String	人员姓名。人员状态。取值含义：0：离职 1：在职
        updateUserInfoBean.setStaffState(loginEntity.get().getUserinfo().getStaffState());//	是	String	人员状态。取值含义：0：离职 1：在职
        updateUserInfoBean.setStaffIdStatus(loginEntity.get().getUserinfo().getStaffIdStatus());//	是	String	帐号状态。取值含义：01：正常 02：停用 03：作废 04：锁定 05：解锁
        updateUserInfoBean.setDlevelId(loginEntity.get().getUserinfo().getDlevelId());//	否	String	职级编号。。
//        updateUserInfoBean.setDiModulus(loginEntity.get().getUserinfo().getD);//	否	String	职级系数。。
//        updateUserInfoBean.setSecondPost();//	否	String	附加岗位。。
        updateUserInfoBean.setDutyId(loginEntity.get().getUserinfo().getDutyId());//	否	String	职务。
//        updateUserInfoBean.setSecondDuty();//	否	String	附加职务。
        updateUserInfoBean.setOrgaId(loginEntity.get().getUserinfo().getOrgaId());//	否	String	组织机构编号。
        updateUserInfoBean.setPostId(loginEntity.get().getUserinfo().getPostId());//	否	String	人员岗位。
//        updateUserInfoBean.setStaffAccount(loginEntity.get().getUserinfo().get);//	否	String	人员帐号。
//        updateUserInfoBean.setDisableBeginDate();//	否	String	失效开始时间。
//        updateUserInfoBean.setDisableEndDate();//	否	String	失效结束时间。
//        updateUserInfoBean.setUpdateTime();//	否	String	修改时间。
//        updateUserInfoBean.setBatchno();//	否	String	批次。
//        updateUserInfoBean.setWorkEefficiency();//	否	String	工单效率。
//        updateUserInfoBean.setPetName(loginEntity.get().getUserinfo().getPe);//	否	String	人员昵称。
        updateUserInfoBean.setSex(loginEntity.get().getUserExtendInfo().getSex());//	否	String	性别。取值含义：0：男 1：女
        updateUserInfoBean.setIsmarried(loginEntity.get().getUserExtendInfo().getIsmarried());//	否	String	婚否。取值含义：42050：已婚 42051：未婚
        updateUserInfoBean.setPoliticalstanding(loginEntity.get().getUserExtendInfo().getPoliticalstanding());//	否	String	政治面貌。取值含义：420520：团员 420521：党员 420519:群众
        updateUserInfoBean.setJoinpartydate(TimeUtils.getFormatTimeYY(loginEntity.get().getUserExtendInfo().getJoinpartydate()));//	否	Date	入团或入党的时间。格式：YYYY-MM-DD
        updateUserInfoBean.setIdcardcode(loginEntity.get().getUserExtendInfo().getIdcardcode());//	否	String	身份证号
        updateUserInfoBean.setTelno(loginEntity.get().getUserExtendInfo().getTelno());//	否	String	联系电话
        updateUserInfoBean.setEducation(loginEntity.get().getUserExtendInfo().getEducation());//	否	String	教育程度。取值含义：420518：博士 420519:硕士 420520：大学本科 420521：大学专科 420522：高中 420523：中专
        updateUserInfoBean.setGraduatedate(TimeUtils.getFormatTimeYY(loginEntity.get().getUserExtendInfo().getGraduatedate()));//	否	Date	毕业时间。格式：YYYY-MM-DD
        updateUserInfoBean.setUniversity(loginEntity.get().getUserExtendInfo().getUniversity());//	否	String	毕业院校
//        updateUserInfoBean.setMajor();//	否	String	所学专业
        updateUserInfoBean.setJoindate(TimeUtils.getFormatTimeYY(loginEntity.get().getUserExtendInfo().getJoindate()));//	否	Date	入职时间
        updateUserInfoBean.setJoinlen(loginEntity.get().getUserExtendInfo().getJoinlen()+"");//	否	String	入职年限
//        updateUserInfoBean.setCompanyid(loginEntity.get().getUserExtendInfo().getC);//	否	String	公司编号
        updateUserInfoBean.setDimissiondate(TimeUtils.getFormatTimeYY(loginEntity.get().getUserExtendInfo().getDimissiondate()));//	否	String	转岗或离职时间
        updateUserInfoBean.setDomiciledplace(loginEntity.get().getUserExtendInfo().getDomiciledplace());//	否	String	户口所在地
//        updateUserInfoBean.setPostalcode(loginEntity.get().getUserExtendInfo().getpo);//	否	String	邮政编码
        updateUserInfoBean.setBirthday(TimeUtils.getFormatTimeYY(loginEntity.get().getUserExtendInfo().getBirthday()));//	否	Date	出生日期
        updateUserInfoBean.setAge(loginEntity.get().getUserExtendInfo().getAge()+"");//	否	String	年龄
        updateUserInfoBean.setNation(loginEntity.get().getUserExtendInfo().getNation());//	否	String	民族
//        updateUserInfoBean.setEmploymentexperience();//	否	String	工作经历
        updateUserInfoBean.setMobilephone(loginEntity.get().getUserExtendInfo().getTelno());//	否	String	手机号码
//        updateUserInfoBean.setEmailaddress(loginEntity.get().getUserExtendInfo().get);//
        if (loginEntity.get().getGroups()!=null&&!loginEntity.get().getGroups().isEmpty())
        {
            updateUserInfoBean.setGroupid(loginEntity.get().getGroups().get(0).getGroupid());
            updateUserInfoBean.setGroupname(loginEntity.get().getGroups().get(0).getGroupname());
        }else {
            updateUserInfoBean.setGroupid("101001");
            updateUserInfoBean.setGroupname("机关第一党支部");
        }

Log.i("***********",Apputils.entityToMap(updateUserInfoBean).toString());
        model.updateStaffInfo(updateUserInfoBean)
                .compose(RxUtils.schedulersTransformer()) //线程调度
                .compose(RxUtils.bindToLifecycle(getLifecycleProvider()))
                .doOnSubscribe(new Consumer<Disposable>() {
                    @Override
                    public void accept(Disposable disposable) throws Exception {
                        showDialog();
                    }
                }).doOnTerminate(new Action() {
            @Override
            public void run() throws Exception {
                dismissDialog();
            }
        }).subscribe(new ApiDisposableObserver<LoginEntity>() {
            @Override
            public void onResult(LoginEntity temLoginEntity) {
                LoginEntity mloginEntity= Apputils.getLoginInfo();
                if (mloginEntity==null)
                {
                    //历史的为空，直接保存
                    SPUtils.getInstance().put(Constant.userinfo, GsonUtil.GsonString(temLoginEntity));
                }else {
                    mloginEntity.setUserExtendInfo(temLoginEntity.getUserExtendInfo());
                    mloginEntity.setUserinfo(temLoginEntity.getUserinfo());
                    if (temLoginEntity.getGroups()!=null&&!temLoginEntity.getGroups().isEmpty())
                    {
                        mloginEntity.setGroups(temLoginEntity.getGroups());
                    }
                    if (temLoginEntity.getAuths()!=null&&!temLoginEntity.getAuths().isEmpty())
                    {
                        mloginEntity.setAuths(temLoginEntity.getAuths());
                    }
                    SPUtils.getInstance().put(Constant.userinfo, GsonUtil.GsonString(mloginEntity));
                }
                ToastUtils.showShort("编辑成功");
                if (mloginEntity!=null&&mloginEntity.getGroups()!=null&&!mloginEntity.getGroups().isEmpty())
                {
                    finish();
                }else {
                    loginEntity.set(temLoginEntity);//更新本地的
                }

            }
        });

    }

    public void showDialogForTip(){
        new AlertView("提示", "确定要退出登录？", "取消", new String[]{"确定"}, null, AppManager.getAppManager().currentActivity(), AlertView.Style.Alert, new AlertViewOnItemClickListener() {

            @Override
            public void onItemClick(Object o, int position) {
                if (position == AlertView.CANCELPOSITION) {
                    //点击取消按钮

                }else {
                    model.logout()
                            .compose(RxUtils.schedulersTransformer()) //线程调度
                            .compose(RxUtils.bindToLifecycle(getLifecycleProvider()))
                            .doOnSubscribe(new Consumer<Disposable>() {
                                @Override
                                public void accept(Disposable disposable) throws Exception {
                                    showDialog();
                                }
                            }).doOnTerminate(new Action() {
                        @Override
                        public void run() throws Exception {
                            dismissDialog();
                        }
                    }).subscribe(new Consumer() {
                        @Override
                        public void accept(Object o) throws Exception {
                            BaseResponse<Boolean> booleanBaseResponse=(BaseResponse<Boolean>)o;
                            //清空登录信息
                            if (booleanBaseResponse==null||booleanBaseResponse.getCode()!=200)
                            {
                                ToastUtils.showShort("退出登录失败！");
                                return;
                            }
                            SPUtils.getInstance().put(Constant.userinfo,"");
                            ToastUtils.showShort("退出登录成功！");
                            startActivity(LoginActivity.class);//跳转到登录界面
                            //关闭页面
                            finish();
                        }
                    });
                }
            }
        }).show();
    }




}
